All files / frontend/server/api/share/resolutions [token].get.ts

0% Statements 0/53
0% Branches 0/1
0% Functions 0/1
0% Lines 0/53

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                                                                                                           
import { useShareResolutionService } from '~~/shared/api-client/services/share-resolution.services'
import { resolveDomainLanguage } from '~~/shared/utils/domain-language'

import { setDomainLanguageCacheHeaders } from '../../../utils/cache-headers'
import { extractBackendErrorDetails } from '../../../utils/log-backend-error'

const isSupportedDomainLanguage = (
  language?: string | null
): language is 'en' | 'fr' => language === 'en' || language === 'fr'

type ShareResolutionParams = {
  token?: string
}

type ShareResolutionQuery = {
  domainLanguage?: string | null
}

export default defineEventHandler(async event => {
  setDomainLanguageCacheHeaders(event, 'private, max-age=0, no-store')

  const { token } = getRouterParams<ShareResolutionParams>(event)
  const { domainLanguage: queryLanguage } =
    getQuery<ShareResolutionQuery>(event)

  if (!token) {
    throw createError({ statusCode: 400, statusMessage: 'Missing token' })
  }

  const rawHost =
    event.node.req.headers['x-forwarded-host'] ?? event.node.req.headers.host
  const domainLanguage = isSupportedDomainLanguage(queryLanguage)
    ? queryLanguage
    : resolveDomainLanguage(rawHost).domainLanguage

  try {
    const shareResolutionService = useShareResolutionService(domainLanguage)
    return await shareResolutionService.getResolution(token)
  } catch (error) {
    const backendError = await extractBackendErrorDetails(error)
    console.error(
      'Failed to fetch share resolution status',
      backendError.logMessage,
      backendError
    )

    throw createError({
      statusCode: backendError.statusCode,
      statusMessage: backendError.statusMessage,
      cause: error,
    })
  }
})